iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
自我挑戰組

一鍵完成六套開源防禦系統整合系列 第 3

兩台主機練習環境:從零到第一張資安案件單

  • 分享至 

  • xImage
  •  

說在前面

這一章只做一件事:把「平台」和「防禦節點」各裝在一台 Ubuntu 上,在內網跑完 「攻擊事件 → 自動建立資安案件 → 人工簽核 → 封鎖落地到防火牆」整圈。 不需要網域、不需要公網 IP、不需要碰 docker。整章只會下三次指令,其餘全部在瀏覽器裡操作。

  1. 前置作業:你要準備什麼
  2. 環境說明:兩台主機各做什麼
  3. 主機 A:安裝平台(一行指令)
  4. 第一次登入:三個帳號怎麼分
  5. 主機 B:安裝防禦節點(一行指令)
  6. 驗證整條鏈:從測試事件到案件
  7. 選用:用指令建一張案件、收系統信
  8. 卡住時對照表、重來一次

一、前置作業:你要準備什麼

1.1 兩台虛擬機

(如果您很熟悉ubuntu與表列的六套系統則只想安裝主機B防禦節點,直接跳到[五、主機 B:安裝防禦節點(一行指令)])

任何能開兩台 VM 的環境都可以:Proxmox、VMware Workstation、VirtualBox、Hyper-V,或雲端兩台小機器。 規格是練習用(1~3 人同時操作)。

CPU / 記憶體:2 vCPU / 4 GB 以上,主機B建議8GB才順
HD space : 30 GB up
帳號:一個能 sudo 的一般帳號,安裝過程全程用它

裝 Ubuntu 的步驟網路上很多,這裡不重複。裝好後先確認三件事:

#### 兩台都跑一次
lsb_release -d          # 22.04 或 24.04
ip -4 addr | grep inet  # 記下這台的內網 IP
curl -sI https://github.com | head -1   # 能連外(HTTP/2 200 之類)

1.2 一組密碼

至少 12 碼,含大寫、小寫、數字、特殊符號,例如 Practice2026#Ok。 這一組密碼會同時給系統管理員和示範企業的所有帳號用,練習期間好記比安全重要,事後再改。

1.3 先記下來的四個值

名稱 範例 用在哪
主機 A 的 IP 192.168.0.111 平台網址、主機 B 的 --backend
主機 B 的 IP 192.168.0.112 WAF 網址、管理介面
你的工作機 IP (填你自己電腦的 IP) 主機 B 的 --admin-ips(允許進管理介面的來源)
上面那組密碼 主機 A 的安裝指令
主機 角色 裝什麼
管制端(主機A) 已安裝 BeakPlatform 的主機 平台本體(見 install.sh)。收事件、跑案件流程、寫決策
防禦端(主機B) Ubuntu 22.04 / 24.04(2 vCPU、4 GB 以上,建議 6 GB) WAF(nginx + ModSecurity + OWASP CRS)、Suricata、CrowdSec、Vector、ClickHouse、od-bridge、cloudflared,選用 Grafana / EveBox / Portainer
#### 本圖就是前兩篇都用到的那張架構圖+事件決策路徑圖的文字版,重覆的不再貼,這張具體而微

你的工作機 ─► 主機 B WAF(8080) ─► 被保護的網站(練習時就填主機 A 的 8000)
                    │ 告警
Suricata(監聽網卡) ─► Vector ─► od-bridge ──事件──► 主機 A /api/open_defense/intake
                    │                   ▲
                    ▼                   │ 每 5 秒拉取封鎖決策
                ClickHouse    nftables / CrowdSec ◄──┘

兩台之間只有兩條連線:主機 B 把事件「送進」主機 A 的 8000 埠,再從同一個埠「拉回」核可的封鎖決策。 主機 A 不會主動連主機 B,所以主機 B 不需要對主機 A 開任何入站埠。

資料面有三個名詞會一直出現:
名詞|意思
系統企業|安裝時自動建立、代表平台本身的企業,代碼長得像 sys-xxxxxxxxxxxx(每次安裝都不同)。管全平台的系統管理員住在這裡
示範企業 DemoSOC|安裝時順便建好的一家「客戶」,有部門、人員、資安人員角色、事件路由與處置流程。練習全部在這家做
開通字串|一行 ODN1. 開頭的字串,裡面打包了平台網址、事件受理金鑰、執行帳號。主機 B 只要拿到它就知道要連哪裡、用什麼身分

很多人直覺會[我是OS管理者root我最大,所以我負責企業運作就是企業的系統管理者,用這觀念使用本系統容易陷入誤區]

管制平台(主機A)是SaaS設計,有四大硬階層

  • 系統級管理員:雲端服務商階層,一套BeakPlatform適用多家彼此沒關聯的企業使用。
  • 企業級管理員:能看見的範圍只限自家的資料,即使你是系統級管理員也看不到,資料庫有部份是加密與獨立的。
  • 企業成員:嗯,就用戶
  • 外部廠商:對,BeakPlatform有設計廠商權限,所以自己人/外人的權限天生有防護,這是實用的特色之一。

上面這四個階層各有自己的登入URL與格式,若不搞清楚就會連登入都進不去。

三、主機 A:安裝平台(一行指令)

curl -sL https://raw.githubusercontent.com/ethan-beakmask/BeakPlatform/main/scripts/install.sh \
  | sudo ADMIN_INITIAL_PASSWORD='<你的密碼>' INSTALL_DEMO=1 bash
不給 ADMIN_INITIAL_PASSWORD 也可以,腳本會在第 6 步停下來要你輸入兩次密碼;但用管線(|)執行時讀不到鍵盤輸入,所以這裡直接寫在指令裡。資料庫密碼與各種金鑰你不必管,沒給的一律自動產生並寫進 .env。

腳本會自動裝 PostgreSQL、Redis、nginx、Python 環境,抓程式碼、建資料庫、種出廠資料、設 systemd 服務, 最後因為 INSTALL_DEMO=1 多做兩件事:建立示範企業 DemoSOC,以及發一組給主機 B 用的開通字串。 全程約 3~5 分鐘,多數時間在裝 Python 套件。

畫面會依序印出 [1/9] 到 [9/9]:系統依賴、PostgreSQL、取得程式碼、Python 虛擬環境、環境變數、 管理員密碼、初始化資料庫、systemd 服務、Nginx。過程不需要你回答任何問題,看著跑完就好。

跑完畫面最下方會有兩段,整段複製存起來。同樣的內容也存在 /opt/BeakPlatform/demo-credentials.txt,只有 root 讀得到(sudo cat 就看得到)。
https://ithelp.ithome.com.tw/upload/images/20260918/20184261UhAfXeWeE5.png
黃框內直接貼WAF主機就安裝到完

[INFO] 全新安裝完成
  URL:  http://192.168.0.111:8000/beakplatform/auth/login
  系統企業: sys-xxxxxxxxxxxx
  管理員:   admin@sys-xxxxxxxxxxxx
  密碼:     (安裝時設定,首次登入須變更)
  ...

檢查點 A:瀏覽器開 http://192.168.0.111:8000/beakplatform/auth/login ,看得到登入頁。 網址一定要帶 :8000 和 /beakplatform,少一個都是 404。

第一次登入就迷路?請參閱完整的登入步驟

四、第一次登入:三個帳號怎麼分

https://ithelp.ithome.com.tw/upload/images/20260917/20184261873NXGCLs7.png

示範企業還有現成的人:資安人員 linda.hu@demo-soc.examplejason.ling@demo-soc.example, 資安主管 kevin.ye@demo-soc.example,密碼都是同一組。等一下看案件、簽核封鎖,用的就是資安人員。

先用「登入網址」(/auth/org/demo-soc.example/login)以示範企業管理員登入一次,確認能進儀表板。 這個網址是示範企業專屬的,帳號只要填 admin-admin.ops,網域已經在網址裡。

檢查點 B:示範企業管理員登入後直接看到儀表板,左側選單有「開放防禦」。

五、主機 B:安裝防禦節點(一行指令)

以下全部在主機 B(防禦節點)上執行。回到第三節主機 A 印出的總結,複製「WAF 主機執行指令」那一行,貼到主機 B 的終端機,再補上被保護網站與你的工作機 IP:

curl -fsSL https://raw.githubusercontent.com/ethan-beakmask/BeakPlatform/main/Integrated-WAF/install.sh -o /tmp/install.sh
  sudo bash /tmp/install.sh \
    --pair 'ODN1....' \
    --backend http://192.168.0.111:8000 \
    --admin-ips <你的工作機IP> \
    --yes

https://ithelp.ithome.com.tw/upload/images/20260917/20184261ZqETCskjvr.png

腳本會裝 docker 與 nftables、抓程式、產生 Suricata / ClickHouse / 防火牆設定、下載 Suricata 規則(約 40 MB)、 啟動所有容器、跑健康檢查,最後印出各服務網址與密碼。全程約 3~6 分鐘,多數時間在抓映像檔。你不需要下任何 docker 指令。

https://ithelp.ithome.com.tw/upload/images/20260917/20184261gQ468k26JQ.png

上表所有埠(含 8080)只對主機 A 與 --admin-ips 列的來源開放,其他內網機器連不到,這是安裝腳本用 nftables 鎖的。 所以第六節的 SQL injection 測試要從 --admin-ips 那台機器發。要開放給更多來源,改 /opt/integrated-waf/.env 的 ADMIN_IPS 後 --reconfigure。

六、驗證整條鏈:從測試事件到案件

在主機 B 上:

sudo bash /opt/integrated-waf/install.sh --verify        # 每一項都要綠
sudo bash /opt/integrated-waf/install.sh --test-event    # 送一筆假攻擊事件進平台

--verify 會列出容器狀態、WAF 的 SQL injection 探測是否回 403、平台連得到、執行帳號登入成功。 --test-event 送一筆來源 vector、攻擊者 203.0.113.42 的事件,幾秒後 od-bridge 會印 forwarded ... status=200。

回主機 A 的平台,用示範企業的資安人員(linda.hu)登入示範企業, 到「開放防禦 → 資安案件處置中心」,會有一張標題含 TEST- 的案件。

檢查點 C:案件出現,代表主機 B 的事件已經簽章送進主機 A、通過路由、建成案件。這是整章最重要的一個畫面。

接著打開那張案件,填處置意見後按「封鎖攻擊來源」。幾秒內主機 B 的 od-bridge 會印 decision ... action=block target=ip/203.0.113.42,在主機 B 執行 sudo nft list set inet secstack blocklist 會看到 203.0.113.42 timeout 1h; 平台的「開放防禦 → 防禦決策」該筆狀態為 applied。

最後試一次真的攻擊路徑:從你的工作機(就是 --admin-ips 那台)的瀏覽器開 http://192.168.0.112:8080/?id=1' OR 1=1--,攻擊指令應該得到 403,那是 WAF 規則生效在擋;同時 EveBox 與案件處置中心會多出對應的事件與案件。

以下是兩種不同的表單,請別跑錯地方

資安-案件中心

https://ithelp.ithome.com.tw/upload/images/20260917/20184261dDQ3AZZ79v.png

行政-表單中心

https://ithelp.ithome.com.tw/upload/images/20260917/20184261uYwrfx3CUB.png

七、選用:用指令建一張案件、收系統信

7.1 用指令建案件(示範外部系統對接,學會此章讓你寫的程式與所有設備都能建立案件表單跑自動化流程)

二步驟:建立Token + 套入以下格式指令,就這麼簡單

除了防禦節點自動送事件,任何外部系統也能用 API Key 直接建案件。這一段示範最小可行的做法。

用示範企業管理員登入,「系統安全 → API Key 管理」新增一把,授權範圍勾「資安」分類。secret 只顯示一次,按 [複製] 存起來。
在主機 A 上(任何有 Python 3 的機器都行):

export BP_BASE_URL='http://192.168.0.111:8000/beakplatform'
export BP_KEY_ID='ak_xxxxxxxx'
export BP_SECRET='<剛複製的 secret>'
python3 /opt/BeakPlatform/scripts/bp_trigger.py --list
python3 /opt/BeakPlatform/scripts/bp_trigger.py \
  --form-code SEC_INCIDENT_RESPONSE --subject 'TEST-手動建單' \
  --field finding_title='TEST-手動建單' --field source_system=manual \
  --field severity_id=3 --field actor_ip=203.0.113.42 --field target_host=demo.internal

回 HTTP 201 就成功,案件處置中心會多一張。--list 會列出這把 key 能發動的表單與每張表單接受的欄位名, 填錯欄位平台會回 400 並把合法欄位名列給你。

7.2 收系統信(忘記密碼、新帳號通知)

練習流程本身不需要寄信。真的要收信時,用系統管理員到「主機設定 → 發信服務」建一組 SMTP(以 Gmail 應用程式密碼為例)、設為預設、主要發信服務選 SMTP,按「測試」寄一封確認。

八、卡住時對照表https://ithelp.ithome.com.tw/upload/images/20260917/20184261eioPqTQiXF.png

九、重新安裝

#### 主機 A(會刪資料庫與目錄,不備份)(升級參數是 --update)
echo YES | sudo bash /opt/BeakPlatform/scripts/install.sh --uninstall
# 再跑第三節那一行

#### 主機 B
sudo bash /opt/integrated-waf/install.sh --uninstall --purge
#### 再跑第五節那一行
主機 A 重裝後系統企業代碼與開通字串都會變,主機 B 一定要用新的字串重裝或 --reconfigure,否則 od-bridge 會一直 401。

本章結束時你會有的東西

  • 一台平台:系統管理員、示範企業 DemoSOC(管理員、資安人員、資安主管、部門與流程都現成)
  • 一台防禦節點:WAF 擋攻擊、Suricata 看流量、事件自動送進平台建案、核可的封鎖自動落地
  • 一把 API Key 與一支單檔工具,示範任何外部系統都能用指令建案件

後面的章節全部在瀏覽器裡操作,不會再回到終端機。


上一篇
Integrated-WAF 防禦節點運作原理-總覽:兩台主機、三條資料流、元件一覽
下一篇
封包路徑:從 Internet 到被保護網站
系列文
一鍵完成六套開源防禦系統整合6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言